package com.ushine.web.base.facade;

import com.ushine.web.base.model.system.FunctionPermissionDO;
import com.ushine.web.base.model.system.RoleDO;
import com.ushine.web.base.model.system.UserDO;
import com.ushine.web.base.model.system.UserGroupDO;
import com.ushine.web.component.exception.ServiceException;

import java.util.List;
import java.util.Set;

/**
 * @Author: yls
 * @Date 2022/2/17 11:16
 * @Description: 用户角色、权限操作
 * @Version 1.0
 **/
public interface IUserRolePermissionFacade {

    /**
     * 功能描述:
     * 〈获取用户的用户组，支持多用户组〉
     *
     * @param userId
     * @return : java.util.List<com.ushine.web.base.model.system.UserGroupDO>
     * @author : yls
     * @date : 2022/2/17 10:00
     */
    List<UserGroupDO> listUserGroups(Long userId);

    /**
     * 功能描述:
     * 〈获取用户关联的所有角色，支持多角色〉
     *
     * @param userId       用户id
     * @param userGroupIds 用户所属id集合
     * @return : java.util.List<com.ushine.web.base.model.system.RoleDO>
     * @author : yls
     * @date : 2022/2/17 10:01
     */
    List<RoleDO> listUserRoles(Long userId, Set<Long> userGroupIds);


    /**
     * 功能描述:
     * 〈根据用户id获取用户的信息〉
     *
     * @param userId 用户id
     * @return : com.ushine.web.base.model.system.UserDO
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2022/3/8 9:48
     */
    UserDO listUserPermissions(Long userId) throws ServiceException;

    /**
     * 功能描述:
     * 〈获取用户的数据权限〉
     *
     * @param userId 用户id
     * @return : java.util.List<com.ushine.web.base.model.system.DataPermissionDO>
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2022/2/17 11:42
     */
    UserDO listUserDataPermissions(Long userId) throws ServiceException;

    /**
     * 功能描述:
     * 〈获取用户的所有权限〉
     *
     * @param userId 用户id
     * @return : java.util.List<com.ushine.web.base.model.system.DataPermissionDO>
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2022/2/17 11:53
     */
    UserDO listUserAllPermissions(Long userId) throws ServiceException;

    /**
     * 功能描述:
     * 〈获取用户的所有权限〉
     *
     * @param username 用户名
     * @return : java.util.List<com.ushine.web.base.model.system.DataPermissionDO>
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2022/2/17 11:53
     */
    UserDO listUserAllPermissions(String username) throws ServiceException;

    /**
     * 功能描述:
     * 〈根据用户名查询用户信息：包括用户组、角色〉
     *
     * @param userName 用户名
     * @return : org.springframework.security.core.userdetails.UserDetails
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2021/12/07 22:01
     */
    UserDO getUserRoleAndGroup(String userName) throws ServiceException;


    /**
     * 功能描述:
     * 〈根据用户id查询用户信息：包括用户组、角色
     * 返回null：可能出现 null ,在用户id不存在的时候，返回null
     * 〉
     *
     * @param id 用户id
     * @return : org.springframework.security.core.userdetails.UserDetails
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2021/12/07 22:01
     */
    UserDO getUserRoleAndGroup(Long id) throws ServiceException;

    /**
     * 功能描述:
     * 〈获取用户的权限树〉
     *
     * @param userId 用户id
     * @return : java.util.List<com.ushine.web.base.model.system.PermissionDO>
     * @throws ServiceException 服务端自定义异常
     * @author : yls
     * @date : 2022/2/17 12:41
     */
    List<FunctionPermissionDO> listUserPermissionsTree(Long userId) throws ServiceException;
}
